import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by blatand on 2017/2/9.
 */
public class ProfileString {

    /**
     * 从ini配置文件中读取变量的值
     *
     * @param file 配置文件的路径
     * @param section 要获取的变量所在段名称
     * @param variable 要获取的变量名称
     * @param defaultValue 变量名称不存在时的默认值
     * @return 变量的值
     * @throws IOException 抛出文件操作可能出现的io异常
     */
    public static String getProfileString (String file , String section , String variable , String defaultValue) throws IOException
    {
        String strLine , value = "";
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        boolean isInSection = false;
        try
        {
            while ((strLine = bufferedReader.readLine()) != null)
            {
                strLine = strLine.trim();
                strLine = strLine.split("[;]")[0];
                Pattern p;
                Matcher m;
                p = Pattern.compile("\\[\\s*.*\\s*\\]");
                m = p.matcher((strLine));
                if (m.matches())
                {
                    p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
                    m = p.matcher(strLine);
                    if (m.matches())
                    {
                        isInSection = true;
                    }
                    else
                    {
                        isInSection = false;
                    }
                }
                if (isInSection == true)
                {
                    strLine = strLine.trim();
                    String [] strArray = strLine.split("=");
                    if (strArray.length == 1)
                    {
                        value = strArray[0].trim();
                        if (value.equalsIgnoreCase(variable))
                        {
                            value = "";
                            return value;
                        }
                    }
                    else if (strArray.length == 2)
                    {
                        value = strArray[0].trim();
                        if (value.equalsIgnoreCase(variable))
                        {
                            value = strArray[1].trim();
                            return value;
                        }
                    }
                    else if (strArray.length > 2)
                    {
                        value = strArray[0].trim();
                        if (value.equalsIgnoreCase(variable))
                        {
                            value = strLine.substring(strLine.indexOf("=") + 1).trim();
                            return value;
                        }
                    }
                }
            }
        }
        finally
        {
            bufferedReader.close();
        }
        return defaultValue;
    }
    /**
     * 修改ini配置文件中变量的值
     *
     * @param file 配置文件的路径
     * @param section 要修改的变量所在段名称
     * @param variable 要修改的变量名称
     * @param value 变量的新值
     * @throws IOException 抛出文件操作可能出现的io异常
     */
    public static boolean setProfileString (String file , String section , String variable , String value) throws IOException
    {
        String fileContent , allLine , strLine , newLine , remarkStr;
        String getValue;
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        boolean isInSection = false;
        fileContent = "";
        try
        {

            while ((allLine = bufferedReader.readLine()) != null)
            {
                allLine = allLine.trim();
                if (allLine.split("[;]").length > 1)
                    remarkStr = ";" + allLine.split(";")[1];
                else
                    remarkStr = "";
                strLine = allLine.split(";")[0];
                Pattern p;
                Matcher m;
                p = Pattern.compile("\\[\\s*.*\\s*\\]");
                m = p.matcher((strLine));
                if (m.matches())
                {
                    p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
                    m = p.matcher(strLine);
                    if (m.matches())
                    {
                        isInSection = true;
                    }
                    else
                    {
                        isInSection = false;
                    }
                }
                if (isInSection == true)
                {
                    strLine = strLine.trim();
                    String [] strArray = strLine.split("=");
                    getValue = strArray[0].trim();
                    if (getValue.equalsIgnoreCase(variable))
                    {
                        newLine = getValue + " = " + value + " " + remarkStr;
                        fileContent += newLine + "\r\n";
                        while ((allLine = bufferedReader.readLine()) != null)
                        {
                            fileContent += allLine + "\r\n";
                        }
                        bufferedReader.close();
                        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file , false));
                        bufferedWriter.write(fileContent);
                        bufferedWriter.flush();
                        bufferedWriter.close();

                        return true;
                    }
                }
                fileContent += allLine + "\r\n";
            }
        }
        catch (IOException ex)
        {
            throw ex;
        }
        finally
        {
            bufferedReader.close();
        }
        return false;
    }
//    public static void main(String[] args){
//
//
//
////        String str = "7A2406802081121B";
////        String message = "2428AF2E50DCE2C8C24C7B1A533CA7BD7D768D017988DD0349000000000000000001000000000000200000000000000000000045890926030710000002405D77A9985696BCC2FDCF6C69E152602319BD9BDF818BB63A42EB1FFEC682D244834AAD20477A3C95393930303030313801569F26088358F8585982309C9F2701809F101307011703A02000010A0100000000001FE0AA119F37049FD7EC7E9F3602018D950500000000009A031612129C01009F02060000000000015F2A02015682027C009F1A0201569F03060000000000009F3303E0F0C89F34030000009F3501229F1E0831323334353637389F090200209F41040045890957136214832131036217D26032202617100215436FDDF59119FD0EFB73010004393030320026303030313232323232323230313631323130323031353132323900246D8AEAE6516EDEE2667FB5D4D093471FF77AC0CFFE438EEC6FB04951AEE9BE71";
////
////
////        try
////        {
////            System.out.println(setProfileString("C:/Users/blatand/Desktop/2.ini" , "Settings" , "SampSize" , "111"));
////        }
////        catch (IOException e)
////        {
////            System.out.println(e.toString());
////        }
//
//        // 读取
//        String value = null;
////        String value2=null;
//        try
//        {
//            value = getProfileString("C:/Users/blatand/Desktop/2.ini" , "FieldType" , "Field2" , "default");
////            value2 = getProfileString("C:/Users/blatand/Desktop/2.ini" , "FieldType" , "Field2" , "default");
//        }
//        catch (IOException e1)
//        {
//            e1.printStackTrace();
//        }
//        System.out.println(value + "  " + "\n");
//
//    }
}
